﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace B.S.DataBase.EFCoreServiers.Dtos.Depts
{
    /// <summary>
    /// 获取部门列表的参数dto
    /// </summary>
    public class GetDepartmentDto
    {
        /// <summary>
        /// 部门名称。
        /// 对应数据库中的 'department_name' 字段，非空，唯一。
        /// 例如："总裁办"。
        /// </summary>
        public string? DepartmentName { get; set; }
        /// <summary>
        /// 当前页码（从1开始）
        /// </summary>
        [DefaultValue(1)]
        public int pageIndex { get; set; } = 1;
        /// <summary>
        /// 每页条数
        /// </summary>
        [DefaultValue(10)]
        public int pageSize { get; set; } = 10;
    }

    public class GetDepartmentResponseDto
    {
        /// <summary>
        /// 部门的唯一标识符。
        /// 对应数据库中的 'id' 字段，主键，自增长。
        /// </summary>
        public int DeptId { get; set; }

        /// <summary>
        /// 部门名称。
        /// 对应数据库中的 'department_name' 字段，非空，唯一。
        /// 例如："总裁办"。
        /// </summary>
        public string DepartmentName { get; set; }

        /// <summary>
        /// 部门状态。
        /// 对应数据库中的 'status' 字段。1为启用（Active），0为禁用（Inactive）。
        /// </summary>
        public byte Status { get; set; } = 1; // 默认值为启用

        /// <summary>
        /// 部门成员数量。
        /// 对应数据库中的 'member_count' 字段，去范式化字段，用于快速显示。
        /// 在实际应用中，此值可能通过业务逻辑维护或从关联表中计算。
        /// </summary>
        public int MemberCount { get; set; } = 0; // 默认值为0

        /// <summary>
        /// 部门主管的用户ID。
        /// 对应数据库中的 'manager_id' 字段，可为空，外键，关联到 Users 表的 Id。
        /// 如果部门没有主管，则为null。
        /// </summary>
        public int? ManagerId { get; set; } // long? 表示可空的长整型

        /// <summary>
        /// 部门主管    根据用户ID查。
        /// 对应数据库中的 'manager_id' 字段，可为空，外键，关联到 Users 表的 Id。
        /// 如果部门没有主管，则为null。
        /// </summary>
        public string? UserName { get; set; } // long? 表示可空的长整型

        /// <summary>
        /// 部门描述。
        /// 对应数据库中的 'description' 字段，可为空。
        /// 提供部门的详细说明或职责。
        /// </summary>
        public string Description { get; set; }

        /// <summary>
        /// 父部门的ID，用于构建部门层级结构。
        /// 对应数据库中的 'parent_id' 字段，可为空，自引用外键。
        /// 如果是顶级部门，则为null。
        /// </summary>
        public int? ParentId { get; set; } // long? 表示可空的长整型
        /// <summary>
        /// 上级部门名称。
        /// 对应数据库中的 'description' 字段，可为空。
        /// 提供部门的详细说明或职责。
        /// </summary>
        public string ParentDeptName { get; set; }


    }
}
